//
//  DTKMapBundleBundle.h
//  DTKMapBundleBundle
//
//  Created by ddev CLI Tools on 2021/3/24.
//

#import <Foundation/Foundation.h>
#import <DTKExternalModule/DTKExternalModule.h>
#import <DGLocationOpenAPI/DGLocationOpenAPI.h>

@interface DTKMapBundle : NSObject <DTKExternalBundleProtocol, DGEMapPluginProtocol, DGELocationPluginProtocol, DGELocationPluginDelegate>

/// 钉钉底座提供了一些便捷的无业务属性的服务，如日志、配置项、UI 服务（alert、toast）、页面跳转等，开发者可以通过该方法，获取相关服务的实现
///
/// 举例：
///
///     id<DTKExternalConfigurationServiceProtocol> configurationService = [DTKMapBundle services].configurationService;
///     NSString *configValue = [configurationService configForKey: @"key", defaultValue: @"default value"];
///
/// - Returns: 一个便捷的调用其他 service 的实例
/// - Important: 这些服务调用无需申请权限
+ (DTKExternalServiceInvoker *)services;

/// 打印日志时，需要传入一个 logger 对象，通过该方法，可以便捷的获取一个 logger 对象
/// 通过 `DTKELog` 及相关方法打印的日志，可以被钉钉底座抓取到。
///
/// 举例：
///
///     DTKELog(DTKMapBundle.logger, @"log content");
///
/// - Returns: 一个 logger 对象
+ (id<DTKExternalLogServiceProtocol>)logger;

/// 钉钉底座提供了一些和业务相关的服务，通过该方法可以获取一个 `invoker` 来调用相关服务
///
/// 举例:
///
///     id<DTKExternalOpenServiceInvokeProtocol> openServiceInvoker = [DTKMapBundle openServices];
///     // 调用需要的开放服务
///     [openServiceInvoker startRequest:@"service name" parameters: @{}, completion:^(){
///         // handle response
///     }];
///
/// - Returns: 一个可以调用其他 openService 的 invoker。
/// - Important: 注意，调用 openService 需要在集成中心申请相关 api 的权限
///
+ (id<DTKExternalOpenServiceInvokeProtocol>)openServices;

+ (id<DTKExternalUIHierarchyServiceProtocol>)uiHierachyService;

@end


